package com.firefly.admin.system.service;


import com.firefly.admin.common.vo.Result;
import com.firefly.admin.system.entity.FySystemMenu;
import com.firefly.admin.system.vo.MenuTree;
import com.firefly.admin.system.vo.SystemMenuQueryVo;
import com.firefly.admin.system.vo.SystemMenuStatusUpdateVo;

import java.util.List;

public interface FySystemMenuService {
    List<FySystemMenu> getMenuListByRoleIds(List<Long> roleIds);

    /**
     * 分页查询系统菜单接口
     *
     * @param systemMenuQueryVo 分页查询参数
     * @return 分页列表
     */
    Result<List<FySystemMenu>> getSystemMenuList(SystemMenuQueryVo systemMenuQueryVo);

    /**
     * 获取系统菜单信息接口
     *
     * @param menuId 菜单ID
     * @return 菜单信息
     */
    Result<FySystemMenu> getSystemMenu(Long menuId);

    /**
     * 系统菜单信息新增接口
     *
     * @param fySystemMenu 角色信息
     * @return 操作结果
     */
    Result<FySystemMenu> add(FySystemMenu fySystemMenu);

    /**
     * 系统菜单信息编辑接口
     *
     * @param fySystemMenu 菜单信息
     * @return 操作结果
     */
    Result<FySystemMenu> update(FySystemMenu fySystemMenu);

    /**
     * 系统菜单状态编辑接口
     *
     * @param systemMenuStatusUpdateVo 状态信息
     * @return 操作结果
     */
    Result<FySystemMenu> updateStatus(SystemMenuStatusUpdateVo systemMenuStatusUpdateVo);

    /**
     * 根据角色ID列表获取菜单列表接口
     *
     * @return 菜单树
     */
    Result<List<MenuTree>> getMenuTreeByRoleIds(String roleIds);

    /**
     * 获取可用菜单树列表接口
     *
     * @return 菜单树列表
     */
    Result<List<MenuTree>> getAllUsableMenuTree();

    /**
     * 系统菜单信息删除接口
     *
     * @param menuId 菜单ID
     * @return 操作结果
     */
    Result<String> delete(Long menuId);

    /**
     * 获取可用菜单列表接口
     *
     * @return 菜单列表
     */
    Result<List<FySystemMenu>> getAllUsableMenuList();

    /**
     * 系统菜单编码校验接口
     *
     * @param menuCode 菜单编码
     * @param menuId   菜单ID
     * @return 校验结果
     */
    Result<String> menuCodeCheck(String menuCode, Long menuId);

    /**
     * 获取菜单树列表接口
     *
     * @return 菜单树列表
     */
    Result<List<MenuTree>> getMenuTree();

    /**
     * 校验用户是否有当前菜单权限
     *
     * @param menuId 菜单ID
     * @param userId 用户ID
     * @return 是否有权限
     */
    boolean checkUserMenu(Long menuId, Long userId);
}
